<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Debugging Features</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link href="css/default.css" rel="stylesheet" type="text/css">
</head>
<body>

<h1>调试器客户端</h1>

<p>AutoHotkey_L 通过 <a href="http://xdebug.org/docs-dbgp.php">DBGp</a> 可以添加调试特性的支持, DGBp 是一种常见的支持多语言和调试器 UI 通信的调试器协议. 参见 <a href="Scripts.htm#idebug">交互式调试</a> 了解更多细节. 在这个页面中列出了已知兼容于 AutoHotkey_L 的一些 UI 或 "客户端".</p>

<h2>XDebugClient</h2>
<p><a href="http://code.google.com/p/xdebugclient/">XDebugClient</a> 是一个基于 <b>.NET Framework 2.0</b> 的简单开源前端 DBGp 客户端. XDebugClient 和 Xdebug 一起最初设计用于 PHP, 不过下面有一个自定义版本可用于 AutoHotkey_L 中.</p>
<p><b>改变:</b></p>
<ul>
  <li>允许调试器引擎报告 "php" 外的其他语言.</li>
  <li>添加 AutoHotkey 语法高亮.</li>
  <li>自动监听调试器引擎的连接, 而不需要等待用户点击 <em>开始监听</em>.</li>
  <li>截去属性值中首个空字符及其后面的内容, 因为当前 AutoHotkey_L 返回整个变量的内容而 XDebugClient 无法正确显示二进制内容.</li>
</ul>
<p><b>下载:</b> <a href="http://www.autohotkey.net/~Lexikos/AutoHotkey_L/XDebugClient.zip">二进制</a>; <a href="http://www.autohotkey.net/~Lexikos/AutoHotkey_L/XDebugClient_src.zip">源代码</a> (也请参见 <a href="http://www.icsharpcode.net/">SharpDevelop</a>, <a href="http://sourceforge.net/projects/dockpanelsuite/">Dockpanel Suite</a> 和 <a href="http://www.codeproject.com/cs/miscctrl/treeviewadv.asp">Advanced Treeview</a>.)</p>
<p><b>用法:</b></p>
<ul>
  <li>运行 XDebugClient.</li>
  <li>运行 AutoHotkey_L /调试. XDebugClient 会自动打开脚本文件.</li>
  <li>在左边距点击以至少设置一个断点.</li>
  <li>在调试菜单中选择运行或按下 F5.</li>
  <li>执行到断点时, 使用调试菜单或快捷键进行单步调试或继续执行脚本.</li>
</ul>
<p><b>特性:</b></p>
<ul>
  <li>源码语法高亮只读显示.</li>
  <li>断点.</li>
  <li>运行, 逐语句/逐过程/跳出.</li>
  <li>查看调用堆栈.</li>
  <li>检查变量 - 选择变量名, 右击, 检查.</li>
</ul>
<p><b>已知问题:</b></p>
<ul>
  <li>当脚本运行时用户界面不响应用户的输入.</li>
  <li>没有提供列出变量或设置变量值的结构.</li>
</ul>

<h2>Notepad++ DBGp 插件</h2>
<p>一个可作为 <a href="http://notepad-plus-plus.org/">Notepad++</a> 插件使用的 DBGp 客户端. 它设计用于 PHP, 不过用于 AutoHotkey_L 时同样工作地很好.</p>
<p><b>下载:</b> 参见 <a href="http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Plugin_Central#D">Notepad++ 插件目录</a>.</p>
<p><b>用法:</b></p>
<ul>
  <li>运行 Notepad++.</li>
  <li>通过 <i>插件</i>, <i>DBGp</i>, <i>配置...</i> 配置 DBGp 插件
    <p><b>注意:</b> 必须配置文件映射. 大多数用户不进行远程调试, 因此可以简单地复选 <i>忽略所有映射 (本地 windows 安装)</i>.</p>
  </li>
  <li>通过工具栏或 <b>插件</b>, <b>DBGp</b>, <b>调试器</b> 显示调试器面板.</li>
  <li>打开需调试的脚本文件.</li>
  <li>至少设置一个断点.</li>
  <li>运行 AutoHotkey_L /调试.</li>
  <li>使用调试器工具栏或快捷键控制调试器.</li>
</ul>
<p><b>特性:</b></p>
<ul>
  <li>根据用户的配置进行语法高亮显示.</li>
  <li>断点.</li>
  <li>运行, 逐语句/逐过程/跳出, 运行到光标, 停止.</li>
  <li>查看局部/全局变量.</li>
  <li>监视用户指定的变量.</li>
  <li>查看调用堆栈.</li>
  <li>悬停在变量上时显示其内容.</li>
  <li>可配置的快捷键 - 设置, 快捷映射..., 插件命令.</li>
</ul>
<p><b>已知问题:</b></p>
<ul>
  <li>悬停在单字母的变量名上时不会显示变量内容 - 例如, 悬停在 "a" 将试图获取 " a" 或 "a " 变量的内容.</li>
  <li>悬停在文本上将试图把文本作为变量名获取其内容, 即使文本中含有非法字符.</li>
  <li>如果属性获取失败 Notepad++ 会变得不稳定, 在上述问题的来源中这是显著的问题. 为了避过此问题, AutoHotkey_L 接到获取一个不存在或非法变量的请求时发送一个空属性而不是错误码.</li>
</ul>

<h2>基于脚本的客户端</h2>
<p>可用于开发中的一个基于脚本的 <a href="http://www.autohotkey.net/~Lexikos/AutoHotkey_L/DBGP.ahk">DBGp 库</a> 和两个基本的客户端:</p><ul>
  <li><a href="http://www.autohotkey.net/~Lexikos/AutoHotkey_L/dbgp_console.ahk">dbgp_console.ahk</a>: 简单的命令行客户端.</li>
  <li><a href="http://www.autohotkey.net/~Lexikos/AutoHotkey_L/dbgp_test.ahk">dbgp_test.ahk</a>: 演示异步调试.</li>
</ul>

<h2>命令行客户端</h2>
<p><a href="http://xdebug.org/">xdebug.org</a> 上有一个可用的命令行客户端, 然而它不适合大多数用户, 因为需要深入理解 DBGp (协议) 才能使用它.</p>

<h2>其他</h2>
<p>其他还有一些可用的 DBGp 客户端, 不过没有在 AutoHotkey_L 测试过. 关于这个, 参见 <a href="http://xdebug.org/docs/remote">Xdebug: 文档</a>.</p>

</body>
</html>
